package com.tms.permission.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;

/**
 * 定时任务配置类
 */
@Configuration
@EnableScheduling
public class SchedulerConfig {

    /**
     * 配置定时任务线程池
     * 使用ThreadPoolTaskScheduler代替默认的单线程调度器
     */
    @Bean
    public ThreadPoolTaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        // 设置线程池大小，避免创建过多线程
        scheduler.setPoolSize(2);
        // 设置线程名前缀，方便排查问题
        scheduler.setThreadNamePrefix("permission-scheduler-");
        // 等待所有任务完成再关闭线程池
        scheduler.setWaitForTasksToCompleteOnShutdown(true);
        // 设置等待时间，超过此时间强制关闭
        scheduler.setAwaitTerminationSeconds(60);
        // 设置线程池关闭时是否中断正在执行的任务
        scheduler.setErrorHandler(throwable -> {
            // 记录异常但不中断任务调度
            System.err.println("定时任务执行异常：" + throwable.getMessage());
        });
        return scheduler;
    }
}
